home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
United Public Domain Gold 2
/
United Public Domain Gold 2.iso
/
utilities
/
pu652.dms
/
pu652.adf
/
AIBB3.docs
< prev
next >
Wrap
Text File
|
1994-11-20
|
59KB
|
952 lines
Amiga Intuition Based Benchmarks (AIBB)
A System Performance Evaluation Utility for the Commodore Amiga
Release Version 3.0
This program's primary purpose is to time-test low-level performance
of an Amiga system, and compare the results with known figures for 3 other
machines, namely the Amiga 2000 (or 500), the Amiga 2500/20 (68020 based
version), and the Amiga 3000/25 (25Mhz model). The comparisons made within
the program are designed to be a 'General' type of comparison. They are far
from 'exact to 0.000000000xx percentage, and do not always reflect
real-world applications performance. They can give an idea of the low-level
performance marks of a particular system, however. Because of the nature of
computer systems, and the fact that differences can occur between two machines
of the same type, the comparisons made should be used as an average view of
system performance. Many comparison samples were used to gather these figures,
and most should come within a good proximity of the values. The conditions
under which these values were obtained is explained in the documentation
below. If you want to REALLY be sure of the comparisons, ideally you should
run the tests on your machine, record the time value each test displays
(the run-time for each test), and do the same thing to the machine you wish
to compare against, and evaluate the differences. This program will give
you an average result answer however, allowing you to make general comparisons
with other types of machines and configurations Please do read the
subsection under menus describing the 'Be Selfish' option...there are some
warnings you MUST read there, and important information pertaining to the
comparision evaluations with this option.
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
Amiga, all Amiga models, and Intuition are trademarks of Commodore-Amiga Inc.
MC68000, MC68010, MC68020, MC68030, and MC68040 microprocessor designations,
M68851 Memory Management Unit, and M68881, M68882 Floating Point coprocessor
designations are trademarks of Motorola Inc.
Disclaimer: I make no guarantees that this program will be accurate. I
have made every attempt to make it so, but I cannot be held
responsible for its accuracy, and/or consequences of such.
(In other words, include standard disclaimer here :-) )
Also, should this program maim and/or destroy various aspects
of your Amiga, I am also not responsible. (Well...it hasn't
killed yet...): Another meaning; if you run this program, and
something about it surprises you, causing you to
spill coffee into your machine, which sends a power spike
feedback through the power lines, down to your local power
station, which subsequently explodes in flames...,
I don't, and never did exist. ;^)
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
PROGRAM REQUIREMENTS:
This program can be used on any Amiga...but there are a few requirements
to use all of it's features. In order to use the Log File saving utility,
you must have the req.library in you libs: directory (v2.5 or higher). Please
read the appropriate sections below for more information on this topic.
Note that this requirement is not in actuality a "requirement", but rather
simply necessary to use a certain feature. Special Note: Under the CLI AIBB
will create it's own stack, when running AIBB from the workbench, however,
you must be sure the STACK field of the icon used is set to the value
of 18500. The supplied icon is already pre-set with this value. The only
errors AIBB may encounter which will result in the program aborting before
starting are that: 1.)If you started from the WorkBench, and the stack
field in the icon was less than 18500 (CLI users need not worry about any
settings), or 2.)AIBB was unable to open either the intuition.library,
graphics.library, or dos.library (all of which are KickStart libraries,
which is in ROM on most machines). If AIBB encounters any of these problems,
it will simply abort gracefully, perhaps flashing the screen.
******************************************************************************
******************************************************************************
******************************************************************************
USING THE PROGRAM:
This program was designed to be fairly easy to use...which is the
reason I utilized an Intuition interface. Basically, test options and
such are selected from menu items, and a test is intiated by selecting
it's gadget on the screen. Again, note that the comparisons made in this
program are meant to be general. Here's an overview:
*****************************************************************************
************************* The Main Screen ***********************************
*****************************************************************************
The screen is divided into two areas. On the left side, you will find
the performance graph, and CPU status indications. The performance graph is
basically just a graphical display of the percentage performance of the
various machines, including your own. The scale represents percentages in
hundreds, i.e. a factor of 6 would be 600%, etc... If for some reason your
machine measures off the scale which is currently displayed, AIBB will
auto-scale the graph to a suitable factor of the base scale (0-14) to fit
the data on the screen. When a test is performed which is much less than
a currently displayed scale, then AIBB will auto-scale downward (the limit
being the base of 0-14) The CPU status area is directly below the graph,
and shows the CPU type in your system, and the status of the various caches,
if applicable, as well as if burst mode on the caches has been enabled. If
your CPU does not have a particular cache feature, the display will show
N/A (Not Applicable). The approximate clockspeed of your CPU is also
displayed in this area (evaluated when AIBB is invoked), as well as the FPU
type on the system, should one exist. [NOTE: These are APPROXIMATE
clockspeed indications...+ or - 5-10%]
The right side of the display contains the numerical analysis display
boxes and the test selection gadgets. From top to bottom, the features are:
Benchmark Result: This box shows the running time in seconds for the
benchmark performed. It is not a comparison, but
simply a display of the time used in performing the
benchmark.
Base Machine = : This area will show what machine is currently being
used as the base machine for percentage calculations.
The next 4 boxes in decending order are the numerical representations of
the percentage performance of each machine for a particular benchmark.
All percentage calculations are percentages relative to the base
machine, where the base machine will always show 100% performance
(naturally, as it is relative to itself). In addition to the
"Base Machine = " indicator noted above, the Base Machine will have
the marking for it's percentage box highlighted. Also displayed with
the performance percentages in the boxes is an abbreviation for the
type of test code being used for the comparison...this is explained
further under the Menus section (Test Option and Comparison Options).
------------------------------------------------------------------------------
The lower right hand side of the screen contains the test gadgets.
selecting a given gadget invokes the test it represents. AIBB currently
implements 12 tests. These tests are divided into two types: "Normal"
tests, and Floating Point tests. "Normal" tests are ones which do not
utilize any floating-point operations, utilizing integer math only, or
no math at all. "Normal" Tests are indicated by dark blue labels upon
their gadgets, whilst Floating Point tests are indicated by bright blue
lables. A description of the tests follows, along with the test's memory
usage. This may be important in determining where the test will end up
Allocating it's memory. Note that tests which do not allocate external
memory are using the program's stack to store variables, and miscellaneous
items. A program's stack is an area of memory created upon the task's
invocation. Under many circumstances, you may have control of this
stack size...for example, program's invoked under the CLI or Shell will
often inherit the default stack set for that CLI/Shell window...which
can be set/changed with the c: "Stack" command. However, AIBB does not
inherit this value, instead allocating it's own stack area (approximately
18K) in the case of the CLI... or having it set higher in the case of
WorkBench invocation. The tests:
WritePixel: (NORMAL test)
The WritePixel Benchmark will open a small window on the screen
and fill it with a box of a given color. The filling is done one
pixel at a time, utilizing the graphics.library (OS) routines
SetAPen() [set the current RastPort primary pen color] and WritePixel()
[which sets a pixel to the given primary pen color]. The test is
basically a benchmark of the time needed to call these routines, and
for them to execute. The loop time is factored out of the test
result. For the most part, this test will be useful for evaluating
the effective ROM image access time for systems which differ from
the conventional ROM access method found on the Amiga 2000, namely
accessing the ROM over a 16 bit bus. Many accelerators are able
to utilize various methods (most commonly through Dave Haynie's
SetCPU utility) to move the image of the ROM code into a faster
memory environment to take advantage of the additional speed and
wider bus bandwidth of higher 680x0 processors (68020, 68030, etc).
This commonly involves utilizing a Memory Management Unit (MMU)
[68551, external device anchored to the 68020, or internally implemented
on the 68030] to divert ROM routine calls to a copy of the ROM
image made in the faster (32-bit) memory. The time needed to
access and execute this image is dependent upon the speed of the
processor/memory setup. [Of course, on the Amiga 3000, the bus is
nominally 32-bits wide, therefore no movement of the ROM image is
required]. Now, there's more to this...accelerated Amigas still
have to access CHIP RAM for this test, as graphics functions are
performed. Therefore, this test will also show (somewhat) the
efficiency of the accelerator (if present) when synchronizing to
and accessing the CHIP RAM bus. [Again, for the Amiga 3000, this
is not entirely applicable, as the design is integrated].
Now, this CHIP RAM bus->accelerator/processor interface efficiency
can cause differences in systems which are based upon similar
accelerated processors, (and at the same processor clockspeed).
Usually the difference is not too great, but it can occasionally
show. Now, for accelerators which do not do ROM image translations,
(usually for ones incapable of them), this test will mostly just
reflect the faster call/return to the benchmark code. However,
if an accelerator includes a cache of any sort, then the cache will
speed the routines themselves up somewhat, as the code for them
may be partially, or even fully cached by the accelerator, negating
the need for the bus access to utilize the OS routine.
Memory Usage: No memory external to AIBB is allocated.
Dhrystone: (NORMAL Test)
This test should be fairly familiar to most people, as it has
been utilized on many different system for benchmarking purposes.
It's a test which attempts to achieve a close-to-real-world-performance
evaluation of the system in question. It returns, not run-time in
seconds, but rather a rating of Dhrystones per second, where in this
case, the larger number indicates better performance.
Memory Usage: Minimal. 44 bytes external to AIBB are allocated.
Matrix: (NORMAL Test)
A matrix manipulation benchmark utilizing 3 50x50 integer matrices.
The test simply performs a series of operations (addition/subtraction,
multiplication, transposition, etc) upon these matrices. Now, the
test is set up in such a way that a great amount of time is spent
moving data, as well as performing arithmetic operations upon it.
Therefore, this could be thought of as also testing memory manipulation
efficiency. Also, the test is an indicator of how well a processor/
memory combination handles memory accesses to data, and operations on
such, as the test does not allow the processor to simply perform the
data operation within it's registers.
Memory Usage: 30000 bytes external to AIBB are allocated.
Fibonacci: (NORMAL Test)
The Fibonacci sequence is a mathematical sequence which has found
some application in the natural sciences, notably in the study of
the constructs of nature. The sequence is set up as follows:
x(0) = 0
x(1) = 1
...
x(j) = x(j) + x(j-1)
where x(j) is simply the next number in the sequence, read "x sub j".
Because of the relative simplicity of the sequence, it lends itself
easily to the creation of a recursive program algorithm to compute
the value. For those unfamiliar with programming in general, a
recursive function is one which calls itself from within itself.
Recursive algorithms in themselves are very inefficient, due to their
nature of repeatedly making a function call to themselves, which
involves repeated address offset calculations, stack value pushing,
etc... by the processor. However, it is sometimes interesting to use
such a function to test the efficiency of a system in it's handling of
multiple function calls. For this reason, I implemented the a
recursive Fibonacci calculation algorithm here, and the benchmark
consists of timing it when calculating the value of Fibonacci(24) 50
times. Each call to the recursive routine to perform the calculation
will result in 150,049 recursive function calls which the Fibonacci
routine will make to itself. For those curious, the value of
Fibonacci(24) is 46,368.
Memory Usage: No memory external to AIBB is allocated.
Sieve: (NORMAL Test)
Another test which should be familiar to most, the Sieve of
Erathosthenes. Its a fairly simple test for determining prime
numbers within a range of numbers. This test simply times your
system when implementing this algorithm, which is decribed fully
in many textbooks, or one can simply look at BYTE Magazine's
benchmarks, which use a similar Sieve test.
Memory Usage: No memory external to AIBB is allocated.
Sort: (NORMAL Test)
A series of 20,000 16-bit integers is sorted from a pseudo-random
setup, and the action is timed. "Pseudo-random" meaning that I did
not create the numbers in a random fashion, but rather in a mixed fashion
so that on each invocation of the test the numbers will be created in
the SAME mixed fashion. This is because the sorting algorithm is
sensitive to the mixing, and if each time the test was run a different
group of values was used, no two tests could be compared well. The
mixing method I used was to insure that the algorithm would be forced
to do the most work for each test.
Memory Usage: 40000 bytes are allocated external to AIBB.
LLines: (NORMAL Test)
This is a low-level test of the Amiga's hardware. It uses the
Blitter to draw lines (left to right, creating a box) across the
screen, in each of 16 colors...ending with black. This test
is similar to the WritePixel test in that it will hit the CHIP RAM
bus a great deal (more so in this case), but it makes no calls to
operating system routines, but rather the system's hardware.
[This is done in a "friendly, legal" fashion, so fear not]. Now, as
all Amiga's have the same basic hardware setup at this level, there
won't be many differences in benchmark time caused by this. At
the time of this writing, therefore, there is not a great deal of
use to this test. However, in the future, there may be other Amiga
systems which utilize a different bus or chip set for the display
hardware, so this test may become useful at that time. Small
differences noted for this test between the comparision machines
are primarily due to loop time differences between the machines
which could not be completely factored out.
Memory Usage: No memory external to AIBB is allocated.
IMath: (NORMAL Test)
Integer Math. This test performs a wide variety of integer math
functions. Included in these functions are the "normal" functions,
such as addition, subtraction, multiplication, division, and a
few additional bitwise functions, such as ANDing, ORing, and XORing.
Memory Usage: No memory external to AIBB is allocated.
FMath: (FLOATING POINT Test)
Floating Point Math. Similar to the IMath test, with the exeception
that Floating Point values and operations are utilized. With this test,
no bitwise operations are performed. Single precision floating point
operations/values are used here.
Memory Usage: No memory external to AIBB is allocated.
Savage: (FLOATING POINT Test)
This is another of the "probably familiar" tests. It is a standard
implementation of the Savage test, which makes nested calls to
trigonometric and other more complex functions to create a single
value. Double precision floating point operations/values are used.
Memory Usage: No memory external to AIBB is allocated.
FMatrix: (FLOATING POINT Test)
The FMatrix test is similar in concept to the Integer Matrix test
outlined above. Again, a great deal of data movement is performed,
in addition to the operations involved, which are floating point
operations in this case. With the matrix operations, the results
under Floating Point coprocessor equipped systems can be interesting
to note, as the system is not able to keep the data within speed-ready
registers, and thus must make many bus accesses for the data it needs.
Double-precision floating point math is used for this test.
Memory Usage: 37,500 bytes externally allocated.
BeachBall: (FLOATING POINT Test)
The longest test of the group. The BeachBall test was originally
written by Bruce Holloway of Weitek, and published in the March 1988
issue of Byte Magazine. It is essentially a very math-intensive
operation which basically draws a beachball on the screen, complete
with shading. The test opens a 640x400 interlaced 16-color screen,
and proceeds to render the picture. This test is closer to a true
"application" test, in that it actually does something visible, and
produces an output. The system will end up being tested in both the
floating point arena, AND in screen output performance, which is
done through traditional OS graphics handling calls [thus will be
affected by the speed of which, which in turn can be affected by
ROM re-mapping, etc]. The picture will remain on-screen for 5 seconds
after the rendering is complete to allow you to view the full creation.
Memory Usage: No memory external to AIBB is allocated.
TEST AND COMPARISON NOTES:
These tests are far from ideal. They suffer from traditional problems
related to benchmarks, in that they do not in and of themselves provide
a total picture of system throughput. Many factors must be taken into
account when evaluating system throughput, including the architecture in
question, it's characteristics, and it's slowest and fastest attributes.
The tests CAN provide a starting point for evaluating a system, however.
I urge you to look at them as such, rather than the complete answer as to
which system is fastest...that decision is more based on what a particular
individual's NEEDs are. [eg, if a person needs to do data transfer as a
major portion of their work, then perhaps a fast disk subsystem and
communications setup would be more appropriate to test than low-level
system performance. If applications are to be run which are very disk
intensive, then a faster disk subsystem will probably make more of a
difference towards system througput then a faster CPU/FPU combination...
all of these things must be taken into account]
Note that the tests CANNOT be aborted once begun (short of re-setting the
system). This is necessary as to provide such an abort mechanism would
require that I add code to poll the message ports to AIBB's interface...
this in itself would affect the benchmark as the time necessary to poll
those ports would show up within the benchmark time, and thus a true
benchmark result would not be possible. I warn you of this for a very
important reason: Some of AIBB's tests are _LONG_...especially on more
or less stock systems. In fact, if you are running a stock 68000-based
system, then most of the floating point tests will be excruciatingly slow.
[The Savage and BeachBall tests are the type where you go out for a while
when running them]. On faster systems this is not such a problem, but
(for example), on a 25MHz 68030 system in 32-bit SRAM (1 wait state), the
Savage will still take 80 or so seconds when NOT using a math coprocessor.
[Don't ASK where this came from... :^) ...Using the Coprocessor version of
this test, with a 25MHz 68882, the test will run in under 3 seconds].
Please do keep these things in mind if you run these tests...especially under
the "Be Selfish" option (explained further below)...the system has not
crashed, or hung on you....the test you selected may simply be VERY LONG,
depending on your system configuration and the type of test parameters you
selected...I have thoroughly tested AIBB...even under low memory situations,
and in the final incarnation of this version I have not been able to crash
it yet. If it should do so, however, I would appreciate being told about
it.]
******************************************************************************
****************************** Menu Items ************************************
******************************************************************************
The menu fields in the menu bar for AIBB are as explained below
==============================================================================
The GENERAL menu:
About:
This simply shows my neato little 'about the program and
life in general' requester. Fairly standard stuff.
-------------------------------------------------------------------------
System Status:
The screen will fade out and back in with a display of some key
notes of interest about your current system status. Various
elements of you system's current state and parameters will
be shown in the upper portion of the screen, including the
location of your system stack (this may be of importance, as is
explained later), Vector Base Register address (if present) and
the number of currently waiting and ready tasks are among the
items of interest. The lower portion of the display holds the
system's memory information. Each entry corresponds to a given
memory node in the system, such as your CHIP RAM area, a FAST RAM
board, etc. The current priority of each area's memory, it's
address, and number of free bytes are displayed, as well as
total memory figures current for the system. This information
may be useful for determining the exact conditions a test is
being run under.
-------------------------------------------------------------------------
Start/Stop Log File:
This will allow you to activate/deactivate AIBB's saving of
test results. [The menu will show 'Start' when you are
currently NOT saving results, and 'Stop' when you are]. When
first selected, AIBB will call up a file requester asking you
for the name of the Log file to use. Currently, the file
requester implemented is the one found in Colin Fox and Bruce
Dawson's req.library, which must be in your LIBS: directory in
order to access this feature. If AIBB cannot find this
shared library, the Log File menu option will be disabled
(ghosted), and you will not be able to save your results in
this manner....however the program will still function otherwise.
When a file is selected, AIBB first checks to see if it exists.
If not, it will create it, writing the identifier 'AIBBLogFile'
at the head of the file (standard text file). All future test
results will be appended to this file, until 'Stop Log File'
is selected, or the program exits. [Note: it is NOT necessary to
stop file logging before exiting...it is mainly there if you
wish to make another file]. If the file you select DOES exist,
AIBB will check the beginning of the file for the 'AIBBLogFile'
identifier...if it finds this, it will again append all results
to the end of this file (nothing will be overwritten)...if AIBB
does not find the identifier at the start of the file, a
requester will pop up warning that the file is NOT a standard
AIBB log file, and will ask you if you wish to cancel the
operation, OR use the file anyway. Be careful..this warning is
designed to keep you from writing over important files...or
programs. [NOTE: AIBB WILL happily write into a binary file if
told to continue...I will add some better checking in the future,
but for now, WATCH the warning!]. Note that AIBB does not buffer
results...it writes to the file as soon as a test is completed.
This shouldn't be too much of a problem, but if people find it
irritating, I will of course add in some buffering. If desired,
RAM: or a recoverable RAMdisk can be used to save results, but
care should be taken that the space the file takes will not use
up your system memory to an extent that the test results will be
affected. (eg, using up your FAST RAM or enough of it that the
memory for a test ends up being allocated in CHIP or SLOW-FAST
RAM, or another slower medium than the ideal you wished to
examine.
-------------------------------------------------------------------------
Quit:
Self explanatory.
The machine will be placed back into the state it was in when
the program was first invoked...regardless of the manipulations
which may have been done during the tests (See the section
on 680x0 cache manipulation).
==============================================================================
The TEST OPTIONS (second) Menu: This menu contains items relevant to the
tests being performed, and the way the results are displayed:
Be Selfish:
This is an important item. Basically, when this is
selected, the program will make sure no other tasks
are given CPU time while one of the tests is running.
In this way, you are assured that the test results will
reflect true CPU performance, and not lag due to other
tasks taking up some of the CPU's time. All of the
comparison figures for the other machines were obtained
with this option ON (A check will be placed by the
option when it is active), *******IF YOU WISH TO COMPARE
TO THE OTHER MACHINES IN THE PROGRAM MOST ACCURATELY,
HAVE 'Be Selfish' SELECTED****** Read on...When 'Be
Selfish' is active, the system will not respond to you
while a test is running. Meaning, you will not be able
to move your mouse pointer, and that most enjoyable
floppy drive 'clicking' will even stop. THIS IS NORMAL!
You will regain control when the test completes...the
system did not hang. Some tests do take a little time,
so hang in there. The only time you will really not
want to have 'Be Selfish' active is if you wish to
test the performance drain on your system from having
multiple tasks running. (or just to see what the normal
load of tasks does to your CPU performance). Now...you must
know something about this option. What AIBB is doing when
this option is active is invoking a Disable() call a bit before
each test, and then an Enable() afterwards. Disable()
is an operating system function which stops all interrupts
within the system. Since the Amiga's multitasking depends upon
interrupts for task switching operatons, this is also stopped,
and AIBB becomes the only task doing anything (there are
exceptions...that is explained later). ALL this aside, I MUST
give you a warning. I designed this program to test CPU/FPU
performance, and as such it is a good idea to have as little
running in the background as possible...aside from performance
issues though, there are some programs/operations which are very
timing sensitive. The Amiga's Multitasking Executive was
designed to be as close to real-time responsive as possible. As
such, programs and tasks under it may be sensitive to system
timing. Such programs may become erratic, or even crash if
a function such as Disable() is invoked for any length of time.
[Disable() should normally only be for a _brief_ time...this
program makes an exception of that in order to get more accurate
timing results]. Now, most programs I have encountered do not
have a problem with AIBB, but things to watch out for are
programs making heavy use of communications ports (serial,
parallel, etc, and disk-intensive programs. Now, this is not
to say AIBB is just waiting to crash your system...I've not had
a crash related to this yet. However, AIBB was designed basically
to be run ALONE, at least while in "Be Selfish" mode, and there
is basically little reason to run it otherwise while using this
mode. But do consider disk operations while in Be-Selfish mode,
and running a test to be a no-no. NOTE: AIBB's own file saving
is done in a safe way, and CAN be used with 'Be Selfish', as the
program only accesses the disk when not performing a test. If
you have AIBB just sitting there not doing anything, then you
do not have to worry, even with "Be Selfish" selected, as this
option is only effective while a test is in progress.
AIBB defaults to NOT using Be Selfish so that the quick-to-jump-in
person will not feel my program has locked-up the system when
they go to do a test. The first time you select 'Be Selfish'
from the menu, a requester will pop up reminding you of what
I just said here. Once the requester has appeared the
first time, it will not appear again during the course of the
program's execution, regardless of how you set the Be Selfish
menu option (otherwise it could become quite annoying :-) )
Again, with 'Be Selfish' NOT enabled, there are no restrictions
to this program's use, but again you may show a marked
performance drop, depending on your system's task load at the test
time.
---------------------------------------------------------------------------
Change Base:
This menu item allows the selection of the machine to be
used as the base in the percentage comparisons. The
submenu which appears next to it allows you to choose
which machine you wish to use as the base machine...the
default being the A2000. With any base, the
percentages, and the graph show the performance of both
your machine, and the other machines as compared to said
base. The base machine will always show itself to have
a relative performance of 100% (naturally, as it's
evaluating itself against itself). The other machines
will show percentages relative to the base machine's
performance.
---------------------------------------------------------------------------
Standard Test Options:
This menu option contains a submenu for selecting the
type of code to run for the 'Standard' (non-floating point)
tests (Dark Blue gadget lettering). It presently contains
two options:
Standard Code: (NCode)
This version of a particular test is
using normal code which will run on
any type of 680x0 processor, and thus
any Amiga. This is the default setting.
020/030 Code: (0XCode)
Tests run under this option use code
which is optimized to run more efficiently
under 68020,68030, and above processors.
It takes advantage of timing differences,
and specialized instructions present in
these processors. This option allows
you to run a test 'set up' to suit a
higher-level processor.
Both versions of the test perform the exact same operations,
except the machine code used to do it differs. This allows
comparisions to be taken with regard to more 'optimum' code
conditions for a particular system setup. (For example,
comparing how well your system performs a Matrix manipulation
while running 020/030 code, compared to 'Standard' code).
Note: if your system is a 68010 or 68000, you will not be
able to use the 020/030 code versions of the tests, as this
code will not run on those processors. Thus, when AIBB
determines the processor type on your system, it will disable
the selection if you do not have an 020 or above.
---------------------------------------------------------------------------
FP Test Options:
This menu item and its corresponding submenu are similar
in concept to the "Standard Test Options" menu item. The
difference here is that the selections made here affect the
Floating Point tests (Light Blue gadget lettering). Again,
two options are present:
Processor Math: (PCode)
If this option is used, AIBB will
perform any of the floating point tests
initiated using the main system processor.
(eg, all math will be done by the CPU)
Coprocessor Math: (CPCode)
This option causes AIBB to use
the version of a test which does the
floating point operations using a
math coprocessor (68881, 68882, or
on board the 68040).
Again, the tests do the same exact operations for either
version...simply the method used to carry out the operations
differs, in this case by the use of in-line coprocessor
instructions for the Coprocessor Math selection. Also, I
should note that the Coprocessor Math option is also utilizing
020/030 based code, as in the "Standard Test Options", as
the in-line instructions here require a standard interface to
the coprocessor, and thus a 68020 or above is also a requirement.
While true that software traps could be implemented to use
a coprocessor on a 68000 or 68010, this has not been used
much on the Amiga, and thus I felt that I would also use
020/030 code to allow a view of how well a system performed
floating point operations when completely set up to take
advantage of an 020/030 + coprocessor configuration. Therefore,
if you have an accelerator using a 68000 or 68010 which
utilizes F-line software traps to utilize a math coprocessor,
the code will most likely crash, as it will also be attempting
to use 020/030 instructions with your CPU. Now, to date I have
not seen any boards which are using the above said method
[effectively], so this probably will not be a problem.
In addition, AIBB tests the system for an FPU when it
is invoked, and if none is detected, the Coprocessor Math
selection will be disabled.
==============================================================================
COMPARISON OPTIONS MENU: The options present here are very related to
the last two options ("Standard Test Options" and "FP Test Options") present
in the "Test Options" menu. These options affect the comparision figures
used when the percentage performance evaluation is done agains the
comparison machines.
Cmp Standard Options: The options listed in the submenu here are
identical to the ones in the "Test Options"
item "Standard Test Options". However, this
does not change the type of code run by your
machine. What it does is change the internal
comparision figures to reflect the performance
of the comparision machines with the option
selected. For example, if you select
"020/030 Code", then the figures used in the
comparisions will be the test times for the
comparision machines when running 020/030 code.
Cmp FP Options: Identical to the above, save that it affects the
performance figures used for comparision with respect
to the floating point tests.
These options may be a little confusing, but here's the idea behind them:
With this setup, you may choose to run a test using "Standard" code. Yet,
you have "020/030 Code" selected under this menu for the comparisions.
Therefore, you will be comparing how well your machine runs a test using
"Standard" code, with respect to the comparision machines running
the same test, but with an advantage: 020/030 code. Likewise, you may
disadvantage the comparison machines by leaving these options in their
"Standard" mode, and run the tests using 020/030 code for your machine
(Thus possibly showing a great percentage performance increase).
Likewise for the floating point tests and options.
==============================================================================
Depending on the processor your machine has, you may find another menu,
'Processor'. This field only appears if you are running a 68020 or above
and allows you to switch the caches of your processor on/off, to see the
effects doing this has on test results. The menu configures itself to
your processor type, so if you are running a 68020, the only item that will
appear under this menu is 'Switch I-Cache'. For higher processors, items
to manipulate the Data and Instruction cache, and the BURST modes will
also appear. When a cache is changed this way, the new cache status will
appear in the CPU status indication area explained below. If you do
choose to manipulate the caches during the tests, and get lazy and don't
set them back the way they were, the program will automatically set the
caches to the state they were in upon startup when you quit the program.
NOTE: As I indicated, if you are running a 68000 or 68010, this menu will
not be present, as it is of no use to those processors. Also, although the
choice for switching BURST mode on may appear for your machine's processor,
it may or may not have effect. This is because your system must be capable
of using this mode, and some are not. If you switch it on and your machine
isn't able to use it, no harm will come of it. In fact, AIBB will
still set the BURST enable bit(s) in the Cache Control Register, but the
processor will simply ignore them.
==============================================================================
COMPARISON NOTES: (IMPORTANT...PLEASE READ)
The machines used by AIBB for the comparisions had the following
configurations...all figures were acquired with the "Be Selfish" option
ENABLED. Please read these sections carefully so that you have a clear
picture of the machines/conditions which generated the comparison figures
AIBB uses internally.
A2000:
Numerous Amiga 2000s (and 500s, which are basically the same machine at
this level) were used to gather the figures for this set of comparison
values. The machines were all equipped with true FAST RAM, and all tests
were run out of this memory.
A2500/20:
This is the earlier Amiga 2500, the model equipped with the CBM A2620
68020-based accelerator. The 68020 on-board the accelerator is
clocked at 14.28MHz, as is the 68881 math coprocessor included. The
accelerator is a synchronous design. A full complement of 32-bit memory
(standard to the board) was used, and the tests run out of this memory.
The memory on the board was the standard 100ns memory at 2 wait states.
The A2620 can be utilized with 80ns memory at 1 wait state by setting
a appropriate jumper (and using the proper parts), and this should be
kept in mind if you are testing a system equipped with such. However,
I chose to use the 100ns parts @ 2 wait states as they were the
standard parts used with the board. The board does include a 68851
Memory Management Unit (MMU), so ROM translations on this machine are
possible, and were done using Dave Haynie's SetCPU (v1.6) utility.
SetCPU also moves the System Stack out of CHIP RAM, and into 32-bit
memory when possible, so this must be kept in mind. The instruction
cache on the 68020 was left ON (the OS will turn it on for you).
A3000/25:
The 25MHz model of the Amiga 3000 was used for the tests, which utilizes
a 25MHz 68030 CPU and 68882 FPU. The following configuration was
evident on the test systems:
2 megabytes of CHIP RAM, 8 megabytes of FAST. The FAST RAM on the
system was of the 80ns Static Column variety. This is important to note,
as the A3000 can be found in many memory configurations. The Static
Column RAM (SCRAM) allows the use of the 68030's BURST mode of data
access. This does result in a faster system. Normal DRAM will show
slower benchmark performance than the SCRAM memory model. The tests
were, of course, run out of the system's FAST RAM. The 68030 settings
were with Instruction and Data caches ON, and BURST mode for both
caches ENABLED.
AIBB's internal test figures were acquired under AmigaOS 1.3....there may be
differences under 2.0 (or other OS versions) which may cause differences with
the test results for your machine if you are using that version of the OS.
Particularly in question may be the OS-call heavy tests. [WritePixel
specifically]. Now, as of this writing, AmigaOS 2.0 was not yet burned into,
or shipping in ROM form yet. Systems running this OS version are using
RAM-resident versions of the KickStart image, which in and of itself will
affect the benchmark results. [eg, a 25MHz 030 system under 2.0 may not
compare the same as the equivalent system under 1.3, particularly for such
tests as the WritePixel, given that the 1.3 system will probably be running
OS code within ROM...[or perhaps mapped to 32-bit RAM...in either case there
may be differences]]. I fully intend to re-evaluate AIBB's comparisons when
2.0 is shipping in ROM form, and issue an appropriate update, if need be.
However, until that time, any comparisions made under 2.0 must be recognized
as being between a 2.0 equipped machine, and 1.3-equipped machines...which
may or may not provide significant differences.
All performance figures for the comparison machines are for NTSC
machines. PAL machines (or machines with the 1MB Agnus running PAL) will
may show false results due to the timing differences. If it becomes a
nuisance, I will add PAL support to the comparisons, as it wouldn't be
THAT big of a chore :^).
Again, comparisions made by AIBB are percentage based. The Graph, and
numerical boxes display the percentage performance of the system being
tested with respect to the "base" system. The base system will always
show a performance "base" of 100%...so, for example, if you run a test
and get 600%, then you are running 600% of the speed of the base system
on that test...this translates to 6 times the speed. The display boxes
for the numerical percentages will also display the type of code being
used for the comparisons...this is so you may keep track of just what
you are comparing against. The abbreviations are:
(Normal [Integer] tests)
NCode ---- Normal Code model
0XCode ---- 020/030 Code models
(Floating-Point tests)
PCode ---- Processor-based code model
CPCode ---- Coprocessor-based code model
Again, I emphasize that the comparision figures AIBB has housed
internally were acquired with the "Be Selfish" option ON. If this option
is not used, you will see significant differences with your performance
with respect to the comparision machines...even if you have an identical
machine. Also, it is important to keep track of where AIBB is getting
memory for it's tests on your system.
Tests can be affected greatly depending on where the memory ends up
being allocated, provided external memory is needed for a given test. The
Amiga utilizes a prioritized memory allocation scheme. Memory of higher
priority is given precedence for general (non-specific) allocation requests,
and if enough memory within a given node with a given priority exists (and
it is contiguous), that memory will be allocated over the same size memory
in a lower priority area. Now, if the memory in the higher priority area
is unavailable, the system will search downward through the areas (and
priorities) until it finds a suitably large, contiguous memory region. This
can be quite important to note on accelerated systems which have, in
addition to 32-bit memory on an accelerator, 16-bit memory. If AIBB requests
a memory block for a test, and there are no free areas in your 32-bit RAM
(or it is severely fragmented to the point that no contiguous chunks of the
required size exist), AIBB may very well end up with memory from the 16-bit
pool...and this will affect the benchmark result. [You may desire this, you
may not...but it is something to keep in mind]. The same argument exists
for CHIP or SLOW-FAST RAM vs. FAST RAM. [SLOW FAST RAM exists on Amigas
with the older 512K Agnus chip. It is the memory on the A501 expander for
the A500, and the other 512K out of 1-meg on the stock A2000 with this older
chip. This memory is still on the CHIP RAM bus, although it is not treated
AS CHIP RAM...therefore it is still subject to the bus contention found on
this bus between the processor and the custom chips (which may result in
performance degradation). A program supplied by CBM called "FastMemFirst"
is necessary and useful for giving any TRUE FAST RAM on the system priority
over the SLOW-FAST memory which may be present. People with the 1-meg Agnus
chip (or the A3000 for that matter) do not have SLOW-FAST memory, and do not
have to concern themselves with this.].
Certain utilities have surfaced which are designed to improve (to a
small degree) system performance on the Amiga. Two such programs are
MoveSSP, which moves the system Supervisor stack out of CHIP memory, where
it is normally located, into FAST RAM, in order to alleviate any small
amount of bus contention which may occur during accesses to this stack.
Another is VBR (or MoveVBR), which moves the system vector base to FAST RAM
from CHIP RAM..(this utility only functions on Amigas with a Vector Base
Register...68010 processors and above). It should be noted that none
of the comparison figures were obtained with any of these utilities in use.
They could cause a slight speedup for your system, (if you notice it at all),
so keep this in mind when benchmarking a system, and be sure to keep track
of just what your system configuration is at a given time for the tests.
[For the most part, all of the comparison figures were obtained with
"vanilla" systems, in the sense that little to nothing was added to the
base startup configuration]. Also see the note above on SetCPU v1.6's
movement of the System Stack...for the A2500/20 tests. This is the same
basic operation as with MoveSSP, (except the MMU is used) so systems running
SetCPU v1.6 will have this stack translated, unless explicitly disallowed.
So, the basic rundown is that SetCPU v1.6 WAS used with stack translation for
the A2500/20...but nothing special was done for the A2000 or A3000/25. I
left the stack translation into the A2500/20 setup simply because it is
the default method in SetCPU v1.6 of translating the system ROM into
32-bit memory.
==============================================================================
A WORD ON THE BENCHMARKS:
The benchmarks employed in AIBB, as I have stated, are not in any way
ideal. They are meant primarily to give a general feel for the performance
of the system in question. However I do wish to make a few comments about
the benchmark code. The code for the benchmarks used here is not optimized
heavily. This is a deliberate action, and with purpose. Code optimization
by compilers (and assemblers to a different extent) can be a wonderful tool
for enhancing program performance. However, it can also make _system_
benchmarks quite hard to properly evaluate. Optimizing compilers (and
post-compilation utilities) do a wide variety of manipulations on the
code generated for a program, or function therein. These optimizations
are very useful for most situations, but can cause problems with system
benchmarks. Optimizers may re-adjust code and totally eliminate variables,
portions of expressions, and even entire code segments. Strength reduction
may be performed on certain operations (an intended multiply operation may
be changed to a simpler multiple-addition operation). While these things
are VERY useful for other types of code, for benchmarks of systems, they
defeat the purpose. I want the system to WORK during the benchmarks, and
do EXACTLY what I intended it to do, in the manner I intended. For this
reason, heavy optimization was not used. Now, some common optimization was
done...use of register variables where possible, etc... And, a certain
amount of internal compiler optimization was unavoidable. However, I was
sure to check the output object code, and verify that I was getting a
good code model of what I wanted tested. The object of AIBB was not to
test how well a compiler could optimize code...but to see just how well
different systems could perform while operating on benchmark code.
The benchmarks employed by AIBB are meant to be used in the context
of comparing one type of Amiga, or Amiga setup to another (or to the
built-in comparison machines). The figures you receive from AIBB should
NOT be used to compare an Amiga to another architecture. The reason for
this is that, there are too many variables involved in such a comparison.
Take, for example, the Dhrystone benchmark. AIBB's implementation of the
dhrystone is "standard" (whatever that means these days), BUT...the version
on the other machine architecture may be standard, but was in compiled the
same way? Better yet, how do the compiler used for AIBB and the other
architecture differ? (Different C compiler implementations by different
authors/publishers will create different code, depending on their levels
of optimization within the compiler itself, etc...). Is the other
architecture's code further optimized? As you see, this creates a big mess
for using AIBB in such comparisons. These types of comparisons are better
left to an environment where the compiling, code generation, etc... are
all under the testing individual's control.
==============================================================================
PROGRAMMING NOTES:
AIBB was written in C, with assembly code sections where necessary.
[the Cache Control Register access routines, etc...]. It was compiled
with SAS/C 5.10a using register argument parameters for all function
calls, 16-bit PC-relative offset function call addressing, and base A4
relative data addressing. It was extensively tested on a variety of
machines, and in a variety of conditions, including AmigaOS 2.0. It should
work properly with all versions of AmigaOS, but 2.0 compatibility has not
been _thoroughly_ tested. If a problem arises under 2.0, I would appreciate
hearing about it. [In any case, as mentioned earlier, the test figures
were set for AmigaOS 1.3...in some cases the OS version will make no
difference, in others it may]. The assembly portions of AIBB were
assembled with the SAS "asm" assembler included with SAS/C 5.10a.
I want to make a comment on the use of Disable() within this program.
Disable() is a function designed primarily to allow a task to access data
structures shared by interrupt code, without worry of having this code
changed by an interrupt event during the access. My use of it here was
because it was the only real way to insure that my program would have the
best chance of being given total control of the procesessor. What I want
to make clear is this: If you are just starting to program the Amiga,
(or other multitasking systems for that matter), the use of Disable() or
functions like it is to be a last resort, unless you are doing something
very similar to what I have done here. Disable() is a very cruel thing
to do to a multitasking system, and should be avoided if at all possible.
There are some circumstances where it's use is necessary, to be sure, but
it should be considered that my use of it here is NOT a standard method
of usage for the call. [In fact, in most circumstances you should not
be Disable()'ed for more than 250ms, as per the ROM Kernel Manual
recommendations.] In the context where I have used the call for this program,
it won't cause problems provided the proper (mentioned earlier) environment
exists. But to be sure, indiscriminate calls to Disable() and such are very
poor programming practice.
==============================================================================
ACKNOWLEDGEMENTS:
I wish to thank all of the folks who helped and supported me in this
project. Especially of help was Dr J. Scott Thayer, sysop of the
Amiga Friends BBS. He spent long periods of time evaluating AIBB, and
finding bugs which I did not notice. Without his help it is doubtful
that AIBB v3.0 would have been released in any timely fashion.
==============================================================================
MISCELLANEOUS:
Questions, comments, and suggestions about this program are quite welcome.
I can be reached the following ways:
Safe Harbor BBS: Amiga Hardware Special Interest Group Operator
(SIGOP--SIG Area 5 [Amiga Hardware]) (414)548-8140
I can always be reached here.
Amiga Friends BBS: (714)870-4754 or -6954 (two lines). Generally
I can be reached here anytime as well.
AmiHolics BBS: (602)843-8486
Northwest Amiga Group (NAG): (503)656-7393
JDR Microsystems BBS: (408)559-0253
Miller's Amiga System BBS: (612)698-1485
I can also be found on USENET: lkoop@crash!pnet01.cts.com (Internet)
[ pick your path :^) ]
If you wish, you can also contact me via the U.S. Snail service at
LaMonte Koop
565 Park Meadows Dr. #302
Waite Park, MN 56387
Enjoy the program, and don't hesitate to comment on it to me. I am always
looking to improve the code I write, so I take constructive criticism
well. However, flames, useless criticism, or general nastiness get their
best attention from me by simply outputting them to either /dev/null or
NIL: ...your choice ;^).